package com.tfjybj.itoo.exam.provider.service.impl;

import com.dmsdbj.itoo.tool.base.service.impl.BaseServicePlusImpl;
import com.dmsdbj.itoo.tool.business.ItooResult;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.exam.entity.AcademyEntity;
import com.tfjybj.itoo.exam.entity.ClassEntity;
import com.tfjybj.itoo.exam.entity.ProfessionEntity;
import com.tfjybj.itoo.exam.entity.StudentEntity;
import com.tfjybj.itoo.exam.model.StudentModel;
import com.tfjybj.itoo.exam.provider.dao.StudentDao;
import com.tfjybj.itoo.exam.provider.service.AcademyService;
import com.tfjybj.itoo.exam.provider.service.ClassService;
import com.tfjybj.itoo.exam.provider.service.ProfessionService;
import com.tfjybj.itoo.exam.provider.service.StudentService;
import com.tfjybj.itoo.exam.template.ScreenClassStu;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * StudentService接口实现类
 * ${base}表
 *
 * @author 杨江涛
 * @version 2.0.0
 * @since 2.0.0 2018-11-15 10:35:56
 */
@Service("studentService")
public class StudentServiceImpl extends BaseServicePlusImpl<StudentDao, StudentEntity> implements StudentService {

    //region 模板生成

    @Resource
    private StudentDao studentDao;
    @Resource
    private ClassService classService;
    @Resource
    private ProfessionService professionService;
    @Resource
    private AcademyService academyService;


    @Override
    public PageInfo<StudentEntity> queryByLikeName(String name, Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        return new PageInfo<>(studentDao.queryLikeName(name));
    }
    //endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * StudentService接口实现类
     * ${student}表
     *
     * @author 杨江涛
     * @since 2.0.0 2018-11-15 10:35:56
     */
    @Override
    public List<StudentModel> findByCode(String code) {
        // 根据学号查询学生所有信息
        StudentEntity studentEntity = this.studentDao.findByCode(code);
        // 根据教室id 查询教室名称
        ClassEntity classEntity = classService.getById(studentEntity.getClassesId());
        // 根据专业id查询专业名称
        ProfessionEntity pro = professionService.getById(studentEntity.getProfessionId());
        // 根据学院id查询学院名称
        AcademyEntity acad = academyService.getById(studentEntity.getAcademyId());
        StudentModel studentModel = new StudentModel();
        BeanUtils.copyProperties(studentEntity, studentModel);
        studentModel.setClassesName(classEntity.getName());
        studentModel.setProfessionName(pro.getName());
        studentModel.setAcademyName(acad.getName());
        List<StudentModel> stuList = new ArrayList<>();
        stuList.add(studentModel);
        return stuList;
    }

    /**
     * 根据学生Id查询学生信息
     *
     * @param id 数据
     * @return 根据学生Id查询学生信息
     * @author 樊建华
     * @since 2018年11月22日11:29:43
     */

    @Override
    public StudentModel findStudentById(String id) {
        if (id == null || id.isEmpty()) {
            return null;
        }

        return studentDao.findStudentById(id);
    }

    /**
     * 根据行政班id查询对应的所有学生信息
     *
     * @param classId 行政班id
     * @return 根据行政班id查询对应的所有学生信息
     * @author 杨江涛
     * @since 2018-11-28 20:23:10
     */
    @Override
    public List<StudentModel> findByClassId(String classId) {
        return studentDao.findByClassId(classId);
    }

    /**
     * 根据行政班id和考试开始时间查询不在这个范围的所有学生
     *
     * @param classId   行政班id
     * @param startTime 考试开始时间
     * @param stuNameOrStuCode 模糊查询学生模糊值
     * @param endTime 考试结束时间
     * @author 马莹
     * @since 2018-12-7 20:02:20
     */
    @Override
    public List<ScreenClassStu> queryNoExamination(String classId, String startTime, String stuNameOrStuCode, String endTime) {
        return studentDao.queryNoExamination(classId, startTime, stuNameOrStuCode, endTime);
    }

    /**
     * 根据姓名、学号、班级名称模糊查询对应的学生信息及班级名称
     *
     * @param searchInfo 行政班id
     * @return 对应的学生信息及班级名称
     * @author 杨江涛
     * @since 2018-12-8 11:09:19
     */
    @Override
    public List<StudentModel> findClassStudent(String searchInfo) {
        return studentDao.findClassStudent(searchInfo);
    }


    /**
     * 导入学生考试信息
     *
     * @param studentNo
     * @return ItooResult
     * @author 贾建清
     * @since 2.0.0 2018-12-27 11:48:05
     */
    @Override
    public StudentEntity findByStudentNo(String studentNo) {
        return studentDao.findByStudentNo(studentNo);
    }

    /**
     * 根据上课班id查询该班所有学生
     *
     * @param teachClassId 上课班id
     * @return 学生集合
     * @author 郭满亮
     * @since 2019年2月27日16:44:34
     */
    @Override
    public List<StudentEntity> getStudent(String teachClassId) {
        return studentDao.getStudent(teachClassId);
    }

    /**
     * 根据学号查询学生id
     * @param codeId 学号
     * @return 学生id
     * @author 郭满亮
     * @since 2019年2月28日10:19:46
     */
    @Override
    public ItooResult getCodeById(String codeId) {
        String studentId = studentDao.getCodeById(codeId);
        if (studentId.isEmpty()) {
            return ItooResult.build(ItooResult.FAIL,"没有此学号");
        }
        return ItooResult.build(ItooResult.SUCCESS,"查询成功",studentId);
    }


}
